Fox's Git Mirrors
README-RU.md HEAD (530aca49) Text, 6.71 KB
# **RNS-over-HTTP**
Интерфейс Reticulum, который туннелирует трафик через стандартные HTTP/S POST-запросы. Это позволяет Reticulum работать в сетях, где разрешён только веб-трафик, эффективно обходя файрволы, DPI и другие ограничения.
Границы пакетов на HTTP-теле используют то же упрощённое HDLC-фреймирование, что и \\`PipeInterface\\` Reticulum, поэтому несколько пакетов могут передаваться в одном теле запроса или ответа без слияния.
[Не-GitHub-зеркало](https://lavaforge.org/Ivan/RNS-over-HTTP). Кроме того, файлы проекта доступны в сети Reticulum по адресу \\`RNS-over-HTTP\\`.
## **Обзор**
RNS-over-HTTP создаёт двунаправленный транспортный уровень, используя простую клиент-серверную модель:
* **Сервер**: Запускается на машине с публичным IP-адресом и прослушивает HTTP-запросы.
* **Клиент**: Может находиться за файрволом или NAT, ему требуется только исходящий доступ в интернет.
Клиент опрашивает сервер с помощью HTTP POST-запросов, отправляя исходящие данные в теле запроса и получая входящие данные в теле ответа. Это делает трафик похожим на обычную веб-активность.
## **Как это работает**
Интерфейс имитирует постоянное соединение, используя механизм, подобный long-polling:
1. Клиент отправляет HTTP POST на сервер с ожидающими HDLC-фреймами в теле запроса.
2. Сервер декодирует входящие пакеты для Reticulum и сразу возвращает исходящую очередь (тоже в HDLC) в теле ответа.
3. Клиент принимает ответ, декодирует фреймы и передаёт пакеты в Reticulum.
4. После настраиваемого интервала опроса клиент повторяет цикл.
## **Особенности**
* **Обход файрволов и DPI**: Туннелирует трафик через стандартные порты HTTP/S (80/443).
* **Двунаправленная связь**: Полнодуплексная передача данных.
* **Совместимое с Pipe фреймирование**: HDLC FLAG/ESC как у \\`PipeInterface\\`.
* **Простая настройка**: Python, \\`httpx\\`, Hypercorn/aioquic для HTTP/2–3 и Reticulum (\\`rns\\`).
* **Надёжность**: Повторное подключение с экспоненциальной задержкой.
* **Гибкость**: Настраиваемые MTU и интервал опроса.
* **Совместимость с прокси**: Caddy, Nginx и аналоги.
* **Повторное использование соединений**: keep-alive / мультиплексирование.
* **HTTP/1.1, HTTP/2 и HTTP/3**: \\`http_version = 1|2|3\\` (по умолчанию \\`1\\`).
## **Начало работы**
### **Требования**
* Python 3.10 или новее
* [Poetry](https://python-poetry.org/docs/#installation)
### **Установка**
1. **Установите зависимости через Poetry** (из корня репозитория):
\\`\\`\\`bash
poetry install
\\`\\`\\`
2. **Установите пользовательский интерфейс:** скопируйте \\`HTTPInterface.py\\` в каталог интерфейсов Reticulum, например \\`~/.reticulum/interfaces/\\`.
### **Тесты**
\\`\\`\\`bash
poetry run pytest -m "not live"
poetry run pytest -m live
\\`\\`\\`
## **Конфигурация**
Добавьте блок интерфейса в \\`~/.reticulum/config\\` на сервере и на клиенте. Поле \\`type\\` должно совпадать с именем модуля (\\`HTTPInterface\\`).
### **Конфигурация сервера**
\\`\\`\\`ini
[[HTTP Server Interface]]
type = HTTPInterface
enabled = true
mode = server
listen_host = 0.0.0.0
listen_port = 8080
mtu = 4096
check_user_agent = true
user_agent = RNS-HTTP-Tunnel/1.0
\\`\\`\\`
### **Конфигурация клиента**
\\`\\`\\`ini
[[HTTP Client Interface]]
type = HTTPInterface
enabled = true
mode = client
server_url = http://your-server-ip-or-domain:8080/
poll_interval = 0.1
mtu = 4096
user_agent = RNS-HTTP-Tunnel/1.0
\\`\\`\\`
## **Параметры конфигурации**
### Общие
* \\`mtu\\`: максимальный размер пакета в байтах (по умолчанию \\`4096\\`)
* \\`user_agent\\`: строка User-Agent (по умолчанию \\`RNS-HTTP-Tunnel/1.0\\`)
### Режим сервера
* \\`mode = server\\`
* \\`listen_host\\` (по умолчанию \\`0.0.0.0\\`)
* \\`listen_port\\` (по умолчанию \\`8080\\`)
* \\`check_user_agent\\` (по умолчанию \\`true\\`)
* \\`serve_html_page\\` / \\`html_file_path\\`: необязательная HTML-страница на GET \\`/\\`
### Режим клиента
* \\`mode = client\\`
* \\`server_url\\` (обязателен)
* \\`poll_interval\\` (по умолчанию \\`0.1\\`)
* \\`http_version = 1|2|3\\` (по умолчанию \\`1\\`)
* для \\`2\\` и \\`3\\`: \\`https://\\`, на сервере \\`tls_certfile\\` / \\`tls_keyfile\\`
* \\`tls_verify\\` / \\`tls_ca_certs\\` на клиенте
* \\`pool_connections\\` / \\`pool_maxsize\\` / \\`keepalive_timeout\\`
## **Обратный прокси (пример Caddy)**
\\`\\`\\`caddy
example.yourdomain.com {
reverse_proxy 127.0.0.1:8080
header {
-Server
X-Content-Type-Options nosniff
}
}
\\`\\`\\`
## **Безопасность**
* Используйте HTTPS там, где возможно.
* По умолчанию сервер проверяет User-Agent. Задайте одинаковый \\`user_agent\\` на обеих сторонах или отключите проверку через \\`check_user_agent = false\\`.
## **Лицензия**
Проект распространяется под [лицензией MIT](LICENSE).
Served by rngit 1.4.1 - Generated in 0.14s